﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business_Logic;
using Business_Entity;

namespace PetSoft.GUI.Configuracion
{
    public partial class GUITienda_Ver_Edit : Form
    {
        private BLTienda tiendaBL;
        private char modo;
        private bool modifico;

        
        
        public bool Modifico
        {
            get { return modifico; }
        }
        
            
        
        
        
        public GUITienda_Ver_Edit(char modo, BLTienda tiendaBL)
        {
            InitializeComponent();
            this.modo = modo;
            this.tiendaBL = tiendaBL;
            this.modifico = false;
            this.telfTiendaTB.KeyPress += new KeyPressEventHandler(Utils.SoloNumerosTB);
            this.nombTienTB.KeyPress += new KeyPressEventHandler(Utils.SoloLetrasNumerosTB);
            this.direcTiendaTB.KeyPress += new KeyPressEventHandler(Utils.SoloLetrasNumerosTB);
            /*Cargo en BLTienda con la tienda y todas las listas que corresponden a tienda para llenar la ventana.*/
            this.tiendaBL.cargarEstadoTienda();
            this.tiendaBL.cargarServicio();
            this.tiendaBL.cargarServicio_X_Tienda();
            this.tiendaBL.cargarTienda();
            this.tiendaBL.cargarTipoServicio();
            /*Modo ver*/
            if (modo == 'v')
            {
                this.serviciosTV.Enabled = false;
                this.buscAdmTdaBTN.Enabled = false;
                this.telfTiendaTB.Enabled = false;
                this.direcTiendaTB.Enabled = false;
                this.nombTienTB.Enabled = false;
                this.estadoCB.Enabled = false;
                this.cajaBTN.Enabled=false; this.cajaBTN.Visible=false;
                this.camposObligaLBL.Visible = false;
                this.Text = "Ver tienda";
            }
            /*Modo editar*/
            else
            {
                this.Text = "Editar tienda";
            }
            /*LLeno el arbol, los comboBox con todass las listas del DAOTienda.*/
            List<BEEstadoTienda> estadoTiendaLST = tiendaBL.EstadoTiendaLST;
            List<BETipoServicio> tipoServicioLST = tiendaBL.TipoServicioLST;
            List<BEServicio> servicioLST = tiendaBL.ServicioLST;
            /* Lista para los servicios ofrecidos por la tienda seleccionada.*/
            List<BE_servicioXtienda> servicioXtiendaLST = tiendaBL.ServicioXtiendaLST;
            BETienda tiendaBE= tiendaBL.TiendaBE;
            TreeNode tipoSvco, servicio;    
            for (int i = 0; i < tipoServicioLST.Count; ++i)
            {
                tipoSvco= this.serviciosTV.Nodes.Add(tipoServicioLST[i].Id + " " +  tipoServicioLST[i].Nombre); /*Estoy cambiando nombre por descripcion*/
                for (int j = 0; j < servicioLST.Count; ++j)
                {
                    
                    if (Convert.ToString(tipoServicioLST[i].Id) ==servicioLST[j].IdTipoServicio)
                    {
                        servicio = tipoSvco.Nodes.Add(servicioLST[j].Codigo + " " + servicioLST[j].Descripcion);
                        int k = 0;
                        /*Verifico que el servicio lo esta dando la tienda para ponerle un check*/
                        while (k<servicioXtiendaLST.Count)
                        {
                            /*1=Activo, 2=Inactivo*/
                            if (servicioXtiendaLST[k].IdServicio == Convert.ToString(servicioLST[j].Codigo) && servicioXtiendaLST[k].Estado==1)
                            {
                                servicio.Checked = true;                               
                                break;
                            }
                            ++k;
                        }
                    }

                }

            }
            this.serviciosTV.ExpandAll();

            
            /*Lleno los demas campos*/
            this.nombTienTB.Text = tiendaBE.Nombre;
            this.direcTiendaTB.Text = tiendaBE.Direccion;
            this.telfTiendaTB.Text = tiendaBE.Telefono;
            this.fechaRegTB.Text = tiendaBE.FechaRegistro;
            this.adminTiendaTB.Text = tiendaBE.IdAdministrador;
            
            /*LLeno el ComboBox*/
            BEEstadoTienda selEstadoTiendaBE = new BEEstadoTienda();
            selEstadoTiendaBE.IdEstado = -1;
            selEstadoTiendaBE.Descripcion = "<Seleccionar>";
            estadoTiendaLST.Insert(0, selEstadoTiendaBE);
            
            this.estadoCB.DataSource = estadoTiendaLST;
            this.estadoCB.ValueMember="idEstado";
            this.estadoCB.DisplayMember = "descripcion";
            /*El campo SelectedIndex admite valores de indice desde 0 en adelante, y admite valores del ValueMember de algun elemento.*/
            this.estadoCB.SelectedIndex = Convert.ToInt32(tiendaBE.IdEstado);
            
            
            /*Otra forma de llenar el combo box: Marco  la opcion que sea igual al estado de la tienda
            for (int i = 0; i < estadoTiendaLST.Count; ++i)
            {
                int indice=this.estadoCB.Items.Add(estadoTiendaLST[i].Descripcion);
                if (estadoTiendaLST[i].IdEstado == Convert.ToInt32(tiendaBE.IdEstado)) this.estadoCB.SelectedIndex = indice;
            }
            */
            /*Este bloque no funciona. No sé por qué*/
            this.telfTiendaTB.Text.TrimEnd();
            this.adminTiendaTB.Text.TrimEnd();
            this.direcTiendaTB.Text.TrimEnd();
            this.nombTienTB.Text.TrimEnd();
            
        }








        private void cancelarBTN_Click(object sender, EventArgs e)
        {
            this.Close();
            /*Haciendo dispose parpadea la pantalla*/
            //this.Dispose();
        }

        
        
        
        
        
        
        
        private void aceptarBTN_Click(object sender, EventArgs e)
        {
            if (this.modo == 'e')
            {
                BETienda tiendaBE = new BETienda();

                tiendaBE.Id = this.tiendaBL.TiendaBE.Id;
                if ( (this.estadoCB.SelectedItem == null) || (this.estadoCB.SelectedIndex==0) || (this.nombTienTB.Text == "") || (this.direcTiendaTB.Text == "") || (this.adminTiendaTB.Text==""))
                {
                    Utils.MessageAviso("Falta llenar 1 o más campos obligatorios");
                    return;
                }
                if (DialogResult.Yes == MessageBox.Show("¿Está seguro que quiere confimar la edicion de la tienda?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                {

                    tiendaBE.Nombre = nombTienTB.Text;
                    tiendaBE.IdAdministrador = adminTiendaTB.Text;
                    tiendaBE.Direccion = direcTiendaTB.Text;
                    tiendaBE.Telefono = telfTiendaTB.Text;
                    //tiendaBE.DescripcionEstado = estadoCB.SelectedItem.ToString();
                    /*Obtengo el idEstado del nuevo estado editado desde el comboBox*/
                    //List<BEEstadoTienda> estadoTiendaLST = this.tiendaBL.EstadoTiendaLST;

                    tiendaBE.IdEstado = this.estadoCB.SelectedValue.ToString();

                    /*for (int i = 0; i < estadoTiendaLST.Count; ++i)
                    {
                        if (estadoTiendaLST[i].Descripcion == this.estadoCB.Text)
                        {
                            tiendaBE.IdEstado =  Convert.ToString(estadoTiendaLST[i].IdEstado);
                            break;
                        }
                    }
                    */


                    /*Lleno la lista servicioXtiendaLST con los nodos con check del TreeView hechos por el usuario*/
                    List<BE_servicioXtienda> servicioXtiendaLST = new List<BE_servicioXtienda>();
                    BE_servicioXtienda servicioXtiendaBE;
                    TreeNode tipoServicioTN, servicioTN;
                    for (int i = 0; i < this.serviciosTV.Nodes.Count; ++i)
                    {
                        tipoServicioTN = this.serviciosTV.Nodes[i];
                        for (int j = 0; j < tipoServicioTN.Nodes.Count; ++j)
                        {
                            servicioTN = tipoServicioTN.Nodes[j];
                            servicioXtiendaBE = new BE_servicioXtienda();
                            string[] servicioVT = servicioTN.Text.Split(new char[] { ' ' });
                            
                            servicioXtiendaBE.IdServicio = servicioVT[0];
                            servicioXtiendaBE.IdTienda = tiendaBE.Id.ToString();
                            /*Estado de servicio : 1=ACTIVO, 2=INACTIVO*/
                            if (servicioTN.Checked == true) servicioXtiendaBE.Estado = 1;
                            else servicioXtiendaBE.Estado = 2;
                            servicioXtiendaLST.Add(servicioXtiendaBE);
                        }
                    }
                    int error = 0;
                    string mensajeError = "";
                    this.tiendaBL.actualizar(tiendaBE, servicioXtiendaLST, ref error, ref mensajeError);
                    if (error == 0)
                    {
                        MessageBox.Show("Transaccion exitosa. Se modificó un registro en el sistema.","Información",MessageBoxButtons.OK,MessageBoxIcon.Information );
                        this.modifico = true;
                        this.Close();
                    }
                    else MessageBox.Show(error.ToString() + " " + mensajeError, "Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
                }

            }

            else //Si esta en modo Ver(v)
            {
                this.Close();
            }
        }







        private void buscAdmTdaBTN_Click(object sender, EventArgs e)
        {	
            RRHH.GUIBuscarEmpleado v = new RRHH.GUIBuscarEmpleado(1);
            v.ShowDialog();
            if (v.Empleado != null)
            {
                //this.nombreAdmTB.Text = v.Empleado.Nombre;
                this.adminTiendaTB.Text = v.Empleado.IdEmpleado.ToString();
            }
            
        }
        
        void CajaBTNClick(object sender, EventArgs e)
        {
        	
        	GUICaja cajas= new GUICaja(this.tiendaBL.TiendaBE);
        	cajas.ShowDialog();
	      
        }
    }
}
